package com.huawei.model;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.huawei.bean.MUserInfoBean;
import com.huawei.bean.Phones;
import com.huawei.db.DBProvider;
import com.huawei.utils.EasyFactory;

public class PhoneInfoModel {

	/**
	 * 新增或修改用户信息 【如果参数实体的主键值不为null，则是进行修改操作，如果为null，则是进行新增操作】
	 * 
	 * @param userInfoB
	 *            用户信息实体类
	 * @return 处理结果
	 */
	public int saveOrUpdatePhoneInfo(Phones phone) {
		// 默认返回值
		int i = 0;
		if (phone != null && phone.getP_id() != null && !phone.getP_id().equals("")) {
			 // 主键字段不为null，则进行修改操作
			
			 // 拼写新增用户信息的sql
			 StringBuilder sbSql = new StringBuilder(" update phones set p_name = ? ");
			 // 使用list存储sql的？占位符的条件参数
			 List<Object> lstParams = new ArrayList<>();
			 // 添加第一个参数，set语句的参数
			 lstParams.add(phone.getP_name());
			
			 // 动态拼写sql语句
			 // 如果手机全称不为空，则修改手机全称
			 if (phone.getP_fullName() != null && !phone.getP_fullName().equals("")) {
			 sbSql.append(" ,p_fullname=? ");
			 // 添加参数
			 lstParams.add(phone.getP_fullName());
			 }
			
			 // 如果价格不为空，则修改价格
			 if (phone.getP_price() != null &&
			 !phone.getP_price().equals("")) {
			 sbSql.append(" ,p_price=? ");
			 // 添加参数
			 lstParams.add(phone.getP_price());
			 }
			
			// 如果编号不为空，则修改编号
			 if (phone.getP_code() != null &&
			 !phone.getP_code().equals("")) {
			 sbSql.append(" ,p_code=? ");
			 // 添加参数
			 lstParams.add(phone.getP_code());
			 }
			 
			// 如果购买界面图片不为空，则修改
			 if (phone.getP_buyimg() != null &&
			 !phone.getP_buyimg().equals("")) {
			 sbSql.append(" ,p_buyimg=? ");
			 // 添加参数
			 lstParams.add(phone.getP_buyimg());
			 }
			 
			// 如果订单界面图片不为空，则修改
			 if (phone.getP_orderimg() != null &&
			 !phone.getP_orderimg().equals("")) {
			 sbSql.append(" ,p_orderimg=? ");
			 // 添加参数
			 lstParams.add(phone.getP_orderimg());
			 }
			
			
			 // 添加修改语句的where条件
			 sbSql.append(" where p_id=? ");
			 // 添加参数值
			 lstParams.add(phone.getP_id());
			
			 // 执行修改语句
			 i = EasyFactory.getNewInstance(DBProvider.class).update(sbSql.toString(),
			 lstParams.toArray());
		} else {
			// 主键字段为null，则进行新增操作
			// 拼写新增用户信息的sql
			String strSql = " insert into phones(p_name,p_fullname,p_price,p_code,p_buyimg,p_orderimg,p_intro) values (?,?,?,?,?,?,?) ";
			// 调用数据库驱动类，进行表数据新增操作 
			i = EasyFactory.getNewInstance(DBProvider.class).update(strSql,
					new Object[] { phone.getP_name(), phone.getP_fullName(), phone.getP_price(), phone.getP_code(),
							phone.getP_buyimg(), phone.getP_orderimg(), phone.getP_intro1()+"-"+phone.getP_intro2()+"-"+phone.getP_intro3() });
		}
		return i;
	}

	/**
	 * 删除用户信息(物理删除)
	 * 
	 * @param userId
	 *            删除记录的主键值
	 * @return 删除结果
	 */
	public int deletePhoneInfoById(String p_id) {
		// 默认返回值
		int i = 0;
		// 拼写新增用户信息的sql
		// 使用delete的删除是物理删除
		String strSql = "update phones set isdelete = 1 where p_id = ?";
		// 调用数据库驱动类，进行表数据新增操作
		i = EasyFactory.getNewInstance(DBProvider.class).update(strSql, p_id);
		// 返回结果
		return i;
	}

	/**
	 * 删除用户信息(逻辑删除)
	 * 
	 * @param userId
	 *            删除记录的主键值
	 * @return 删除结果
	 */
	public int DeleteMUserInfoByIdLogic(Integer muserId) {
		// 默认返回值
		int i = 0;
		// 拼写新增用户信息的sql
		// 使用delete的删除是物理删除
		String strSql = "update table muserinfo set isdeleted = 1 where muser_id = ? ";
		// 调用数据库驱动类，进行表数据新增操作
		i = EasyFactory.getNewInstance(DBProvider.class).update(strSql, muserId);
		// 返回结果
		return i;
	}

	/**
	 * 查询所有的用户信息
	 * 
	 * @return 查询结果集
	 */
	public List<Phones> queryAllPhonesInfo() {
		// 拼写登录查询的sql语句
		String strSql = " select * from phones order by p_id desc ";
		// 执行查询，获取查询结果集（List+Bean）
		List<Phones> lst = EasyFactory.getNewInstance(DBProvider.class).query(strSql,
				new BeanListHandler<Phones>(Phones.class));
		// 返回查询结果集
		return lst;
	}

	/**
	 * 根据过滤条件查询用户信息
	 * 
	 * @return 查询结果集
	 */
	public List<Phones> queryPhoneInfoByParams(Phones phone) {
		// 拼写登录查询的sql语句
		StringBuilder sbSql = new StringBuilder(" select * from phones where isdelete = 0");
		// 使用list存储sql的？占位符的条件参数
		List<Object> lstParams = new ArrayList<>();

		if (phone != null) {
			// 动态拼写Sql条件
			String strPhoneName = phone.getP_name();
			String strPhoneCode = phone.getP_code();
			if (strPhoneName != null && !strPhoneName.equals("")) {
				// 如果手机名称不为空，则条件手机称查询过滤条件
				sbSql.append(" and p_name like ? ");
				// 同时对应添加查询条件集合
				lstParams.add("%" + strPhoneName + "%");
			}
			if(strPhoneCode != null && !strPhoneCode.equals("")) {
				//如果手机编码不为空，则过滤查询
				sbSql.append(" and p_code = ?");
				//添加查询条件集合
				lstParams.add(strPhoneCode);
			}

		}

		// 拼接排序条件
		sbSql.append(" order by p_id desc ");

		// 执行查询，获取查询结果集（List+Bean）
		List<Phones> lst = EasyFactory.getNewInstance(DBProvider.class).query(sbSql.toString(),
				new BeanListHandler<Phones>(Phones.class), lstParams.toArray());

		// 返回查询结果集
		return lst;
	}

	/**
	 * 根据id查询用户信息
	 * 
	 * @param strUserId
	 *            主键id
	 * @return 查询结果实体类
	 */
	public Phones queryPhoneInfoById(String strPhoneId) {
		// 拼写登录查询的sql语句
		String strSql = "select * from phones where p_id = ? ";
		// 执行查询，获取查询结果集（Bean）
		Phones phone = EasyFactory.getNewInstance(DBProvider.class).query(strSql,
				new BeanHandler<Phones>(Phones.class), strPhoneId);
		// 返回查询结果集
		return phone;
	}
}
